Objektorienterad & Funktionell programmering i JavaScript

Grunden i funktionell programmering är användande av funktioner.
Grunden i objektorienterad programmering är användade av object.

Allt i JavaScript är object och funktioner. Det går bra att skriva både funktionell kod och objektorienterad kod.

Objektorienterad vs funktionell programmering

Funktionell programmering passar bra för små, statiska program, där programmets interna tillstånd ej förändras nämvärt när programmet körs.

Objektorienterad programmering passar bra för att packa data och funktioner i abstrakta objekt, där metoder och attribut används för att ändra objektets tillstånd.

Exempel

Föreställ dig i ett actionspel där spelpjäserna ofta ändrar läge, i ett sådant spel passar det bra att använda objektorienterad programmering. Varje spelpjäs kan till exempel representeras av ett objekt, som internt lagrar spelpjäsens position på spelplanen.

Skulle samma actionspel i stället implementeras i funktionell programming, skulle förmodligen en ny spelpjäs skapas för varje gång den ändrar position ...
En av nackdelarna med att skap nya i stället för att uppdatera befintiliga är att det tar extra datorresurser. En av fördelarna är att man inte behöver oroa sig för att datan ändras, vilket gör det lättare att köra flera funktioner parallelt.

Rena funktioner

När en funktion är fri från globala variabler kan man säga att det är en ren funktion (på Engelska: pure function)

I både funktionell programmering och objektorienterad programmering bör man sträva efter att alla funktioner och objekt inte kan påverka omvärden.
När en funktion påverkar något utanför funktionen, brukar det kallas för sido-effect (på Engelska: side effect).
En sido-effekt kan till exempel vara att en global variabel ändras, att funktionen tänder/släcker en lampa, en fil sparas, eller att data uppdateras.

I objektorienterad programmering bör man se till att objekten bara kan påverka sig själv, och i funktionell programmering ska man se till att funktioner ej påverkar omvärden.
Skulle man dock ta detta till det extrema skulle alla program vara meningslösa om de inte fick innehåll sido-effekter, till exempel att någonting visas på skärmen, eller att en fil sparas.

Tänk dig ett program, som kan tända en lampa, och det är en bug någonstans, som gör att lampan tänds vid fel tillfälle. Då blir det förmodligen mycket enklare att hitta felet om lampan bara kan tändas på ett ställe, än om lampan kan tändas på hundra olika ställen i programmerings-koden.

Funktionell programmering


function sayUsing(f) {
	return function say() {
		f(txt);
	}
}

var say = sayUsing(console.log);

say("hello");
say("world");

Objektorienterad programmering

var speaker = new Speaker({name: "Jon Doe"});

speaker.say("hello");
speaker.say("world");

function Speaker(name) {
	this.name = name;
}
Speaker.prototype.say = function(txt) {
	console.log(this.name + " says: " + txt);
}


Denna artikel är skriven av Johan Zetterberg som en del av Johan's JavaScript guide.


Följ mig via RSS:   RSS https://zäta.com/rss.xml (ange adressen i din feed-läsare)